package homework.level01model03;


import java.util.ArrayList;

public class homework02 {
    /*编程获取两个指定字符串中的最大相同子串。

    如： s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"

    提示： 将短的那个串进行长度依次递减的子串与较长的串比较。
}*/
    public static void main(String[] args) {
        //常量池
        String str1 = "asdafghjka";
        String str2 = "aaasdfg";

        //备份
        String str3 = str2; //7
        int length = str3.length();

        //动态数组存储子串
        ArrayList<String> arrayList = new ArrayList<>();


        //获取str3长度依次递减的子串 subString
        for (int i = length; i > 0; i--) { //子串长度遍历

            for (int j = 0; j + i <= length; j++) {
                String subString = str3.substring(j, j + i);//设置endindex和startindex
                //获取的子串和长串也就是str1进行匹配
                boolean b = str1.contains(subString);
                if (b) { //若是子串 把他放到动态数组arrayList中
                    arrayList.add(subString);
                }
            }

        }

        //找到长度最大的元素并放到动态数组arrayList1中
        //取子串时通过长度递减遍历 所以最大长度为第一个子串长度
        int max = arrayList.get(0).length();
        int size = arrayList.size();
        ArrayList<String> arrayList1 = new ArrayList<>();
        //for循环找到最大长度的所有子串放到动态数组arrayList1中
        for (int i=0;i<size;i++){
            String s = arrayList.get(i);
            int length1 = s.length();
            if (length1==max){
                arrayList1.add(s);
            }
        }

        //当动态数组arrayList1中元素个数为1 则该元素为最大子串
        int size1 = arrayList1.size();
        if (size1==1){
            System.out.println(arrayList1.get(0));
        }else{  //当动态数组arrayList1中元素个数大于1时，通过compareTo确定最大子串
            String s = arrayList1.get(0);
            for (int i=1;i<size1;i++){
                String s1 = arrayList1.get(1);
                int i1 = s.compareTo(s1);
                if (i1<0){
                    s=s1;
                }
            }
            System.out.println(s);
        }


    }




}
